
var EntryUnit = 1;
var ChartName = "GnD Cross";
var HLrate = 1;
var OpPrice = 4.00;
var LowPrice = 2.00;
var HighPrice = 4.00;
var OrderGap = 0.2;
var OpDays;
var GnDCrossCallStat = 0, GnDCrossPutStat = 0;
var BuyCode, BuyPrice, OrderPrice;
var SelectCallPrice, SelectPutPrice;
var ExitCode, CurPrice, ForPrice;
var GetEntryOpDays, GetEtnryCode, GetEntryVol;
var d = new Date();

function Main_OnStart()
{
  OpDays=Option.GetRemainDays(0,0);
  Main.MessageLog("<<<< "+ d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() +
  "  ||  : " + OpDays +" >>>>" );
  Main.MessageLog("GnD Cross CallStat : " + Main.GetUserValue("GnDCrossCallStat"));
  Main.MessageLog("GnD Cross PutStat : " + Main.GetUserValue("GnDCrossPutStat"));
}

function TestChart_OnRiseSignal(Signal)
{
  if (Signal.signalKind == 1)
  {
    Main.MessageLog("--- " + Signal.time + ":" + ChartName + " longSignal ---");
    SelectCallPrice = 100;
    for (cnt1=-30; cnt1<=30; cnt1++)
    {
      ForPrice = Option.GetCurrent(0,cnt1);
      //GetCurrent(nCallPut, nATMLevel)
      //nCallPut : 0 - RecentCall, 1 - RecentPut
      //nATMLevel : 0 - ATM, Pos + level, Neg - level
      
      if(Math.abs(ForPrice*HLrate - OpPrice)<=SelectCallPrice && LowPrice<ForPrice && ForPrice<HighPrice)
        {
          SelectCallPrice = Math.abs(ForPrice*HLrate - OpPrice);
          BuyCode = Option.GetATMCallRecent(cnt1);
          BuyPrice = Option.GetCurrentByCode(BuyCode);          
        }
      }
      
      OrderPrice = BuyPrice + OrderGap;
      MyAccount.OrderBuy(BuyCode, EntryUint, OrderPrice, 0);
      GnDCrossCallStat = 1;
      Main.MessageLog("(" + Signal.time + " : " + ChartName + " Entry Call ) " + BuyCode + 
      " : " + EntryUnit + " 簡 : " + BuyPrice + " ֹ : " + OrderPrice);
      Main.SetUserValue("GnD Cross CallStat",GnDCrossCallStat);
      Main.SetUserValue("GnD Cross EntryCode",BuyCode);
  }
  
  if (Signal.signalKind ==2)
  {
    Main.MessageLog("--- " + Signal.time +":" + ChartName + "OnRiseSignal ExitLong ---");
    if(GnDCrossCallStat == 1)
    {
      Main.MessageLog("<ExitLong with CallStat ==1> " + Signal.time + " Code : " + BuyCode + " EntryUnit : " + EntryUnit);
    }
    else
    {
      Callstat = Main.GetUserValue("GnDCrossCallStat");
      BuyCode = Main.GetUserValue("GnD Cross EntryCode");
      Main.Messagelog("<ExitLong with CallStat != 1> " + Signal.time + " Code : " + Buycode + " EntryUnit : " + EntryUnit); 
    }
    
    if (GnDCrossCallStat == 1)
    {
      CurPrice =  Option.GetCurrentByCode(BuyCode);
      if (CurPrice <= OrderGap)
      {
        OrderPrice = 0.01;
      }
      else
      {
        OrderPrice = (CurPrice - OrderGap);
      }
      
      MyAccount.OrderSell(BuyCode,EntryUnit,OrderPrice, 0);
      Main.MessageLog("(" + Signal.time + " : " + ChartName + " ExitLong with CallStat ==1 ) " + BuyCode + 
      " : " + EntryUnit + " 簡 : " + CurPrice + " ֹ : " + OrderPrice);
    }
    else
    {
      Main.MessageLog("<GnD Cross CallStat == 0> " + Signal.time + " : " + ChartName); 
    }
    CallStat == 0;
    Main.SetUserValue("GnDCrossCallStat",GnDCrossCallStat);
  }

if (Signal.signalKind == 3)
  {
    Main.MessageLog("--- " + Signal.time + ":" + ChartName + " ShortSignal ---");
    SelectPutPrice = 100;
    for (cnt1=-30; cnt1<=30; cnt1++)
    {
      ForPrice = Option.GetCurrent(1,cnt1);
      //GetCurrent(nCallPut, nATMLevel)
      //nCallPut : 0 - RecentCall, 1 - RecentPut
      //nATMLevel : 0 - ATM, Pos + level, Neg - level
      
      if(Math.abs(ForPrice*HLrate - OpPrice)<=SelectPutPrice && LowPrice<ForPrice && ForPrice<HighPrice)
        {
          SelectPutPrice = Math.abs(ForPrice*HLrate - OpPrice);
          BuyCode = Option.GetATMPutRecent(cnt1);
          BuyPrice = Option.GetCurrentByCode(BuyCode);          
        }
      }
      
      OrderPrice = BuyPrice + OrderGap;
      MyAccount.OrderBuy(BuyCode, EntryUint, OrderPrice, 0);
      GnDCrossPutStat = 1;
      Main.MessageLog("(" + Signal.time + " : " + ChartName + " Entry Put ) " + BuyCode + 
      " : " + EntryUnit + " 簡 : " + BuyPrice + " ֹ : " + OrderPrice);
      Main.SetUserValue("GnDCrossPutStat",GnDCrossPutStat);
      Main.SetUserValue("GnD Cross EntryCode",BuyCode);
  }
  
  if (Signal.signalKind ==4)
  {
    Main.MessageLog("--- " + Signal.time +":" + ChartName + "OnRiseSignal ExitShort ---");
    if(GnDCrossPutstat == 1)
    {
      Main.MessageLog("<ExitShort with PutStat ==1> " + Signal.time + " Code : " + BuyCode + " EntryUnit : " + EntryUnit);
    }
    else
    {
      Putstat = Main.GetUserValue("GnDCrossPutStat");
      BuyCode = Main.GetUserValue("GnD Cross EntryCode");
      Main.Messagelog("<ExitShort with PutStat != 1> " + Signal.time + " Code : " + Buycode + " EntryUnit : " + EntryUnit); 
    }
    
    if (GnDCrossPutStat == 1)
    {
      CurPrice =  Option.GetCurrentByCode(BuyCode);
      if (CurPrice <= OrderGap)
      {
        OrderPrice = 0.01;
      }
      else
      {
        OrderPrice = (CurPrice - OrderGap);
      }
      
      MyAccount.OrderSell(BuyCode,EntryUnit,OrderPrice, 0);
      Main.MessageLog("(" + Signal.time + " : " + ChartName + " ExitShort with PutStat ==1 ) " + BuyCode + 
      " : " + EntryUnit + " 簡 : " + CurPrice + " ֹ : " + OrderPrice);
    }
    else
    {
      Main.MessageLog("<PutStat == 0> " + Signal.time + " : " + ChartName); 
    }
    GnDCrossPutStat == 0;
    Main.SetUserValue("GnDCrossPutStat",GnDCrossPutStat);
  }
}
